package com.mxdx.base.service.facade;

import java.io.InputStream;
import java.util.Map;

import com.mxdx.edu.common.ApiResult;

/**
 * 文件上传对外服务
 * 
 * @author gblw
 * @date 2015年5月18日
 */
public interface IFileUploadServiceFacade {

    /**
     * 上传文件到存储服务器
     * 
     * @param app 应用模块文件名称，将根据此名称设定第一级目录
     * @param in FileInputStream(path)
     * @param type jpg doc xls png等
     * @return
     */
    ApiResult<Map<String, String>> saveFile(String app, String type, InputStream in);

    /**
     * 上传文件到存储服务器
     * 
     * @param app 应用模块文件名称，将根据此名称设定第一级目录
     * @param bs 文件内容字节数组
     * @param type jpg doc xls png等
     * @return
     */
    ApiResult<Map<String, String>> saveFile(String app, String type, byte[] bs);

    /**
     * 保存内容到指定的文件目录中， 格式为 pay_20150912_123a.xls 存储目录对应 pay/123a/2015/09/pay_20150912_123a.xls
     * 
     * @param fileName 存储文件名称
     * @param bs 文件名称
     * @param isAllowOverwritte 如果文件存在，是否需要覆盖原文件； 如果设置为false， 原文件存在时将返回错误码 00010001 不覆盖文件，否则将覆盖文件
     * @return 成功将status将为00000000
     */
    ApiResult<String> saveToAssignFile(String fileName, byte[] bs, boolean isAllowOverwritte);

    /**
     * 获取文件存储的文件内容, 指定文件名字上传格式为 pay_20150912_123a.xls
     * 存储目录对应af/pay/123a/2015/09/pay_20150912_123a.xls
     * 
     * @param fileName 上传文件名字
     * @return
     */
    ApiResult<byte[]> getAssignFileByName(String fileName);

    /**
     * 获取文件存储非指定文件名字的文件内容, 非指定文件名字上传格式为 wj_87zfQVH3326.txt 存储目录对应 wj/26/33/wj_87zfQVH3326.ori.txt
     * 
     * 
     * @param fileName 上传文件名字
     * @return
     */
    ApiResult<byte[]> getFileByName(String fileName);


    /**
     * 删除文件（暂时只写日志，未删除，以后将写入消息中心异步删除）
     * 
     * @param fileName
     * @return
     */
    ApiResult<String> delFile(String fileName);

}
